class MyLocationStyle {
  MyLocationType myLocationType;
  int radiusFillColor;
  int strokeColor;
  double strokeWidth;
  int interval; //设置发起定位请求的时间间隔，单位：毫秒，默认值：1000毫秒，如果传小于1000的任何值将执行单次定位
  String myLocationIcon;

  MyLocationStyle({
    this.myLocationType,
    this.radiusFillColor,
    this.strokeColor,
    this.strokeWidth,
    this.interval,
    this.myLocationIcon,
  });

  Map<String, dynamic> toJson() {
    return {
      'myLocationType': this.myLocationType.index,
      'radiusFillColor': this.radiusFillColor,
      'strokeColor': this.strokeColor,
      'strokeWidth': this.strokeWidth,
      'interval': this.interval,
      'myLocationIcon': this.myLocationIcon,
    };
  }

  factory MyLocationStyle.fromJson(Map<String, dynamic> map) {
    return new MyLocationStyle(
      myLocationType: _getLocationType(map['myLocationType']),
      radiusFillColor: map['radiusFillColor'] as int,
      strokeColor: map['strokeColor'] as int,
      strokeWidth: map['strokeWidth'] as double,
      interval: map['interval'] as int,
      myLocationIcon: map['myLocationIcon'] as String,
    );
  }

  @override
  String toString() {
    return 'MyLocationStyle{myLocationType: $myLocationType, radiusFillColor: $radiusFillColor, strokeColor: $strokeColor, strokeWidth: $strokeWidth, interval: $interval, myLocationIcon: $myLocationIcon}';
  }
}

enum MyLocationType {
  show, // 只定位。
  locate, // 定位、且将视角移动到地图中心点。
  follow, // 定位、且将视角移动到地图中心点，定位点跟随设备移动。
  mapRotate, //定位、且将视角移动到地图中心点，地图依照设备方向旋转，定位点会跟随设备移动
  locationRotate, //default 定位、且将视角移动到地图中心点，定位点依照设备方向旋转，并且会跟随设备移动。
  locationRouteNoCenter, //定位、但不会移动到地图中心点，定位点依照设备方向旋转，并且会跟随设备移动
  followNoCenter, // 定位、但不会移动到地图中心点，并且会跟随设备移动。
  mapRotateNoCenter, // 定位、但不会移动到地图中心点，地图依照设备方向旋转，并且会跟随设备移动。
}

MyLocationType _getLocationType(int index) => MyLocationType.values.firstWhere(
      (it) => it.index == index,
      orElse: () => null,
    );
